package org.yzhzc.system.service.exam;

import org.yzhzc.system.domain.exam.dto.*;
import org.yzhzc.system.domain.exam.vo.*;

import java.util.List;

import java.util.List;

/**
 * 竞赛服务接口，定义了竞赛相关的操作方法
 */
public interface IExamService {

    /**
     * 获取竞赛列表
     *
     * @param examQueryDTO 竞赛查询条件
     * @return 返回符合查询条件的竞赛列表
     */
    List<ExamVO> list(ExamQueryDTO examQueryDTO);

    /**
     * 添加新的竞赛
     *
     * @param examAddDTO 竞赛添加参数
     * @return 返回新增竞赛的ID或其他标识符
     */
    String add(ExamAddDTO examAddDTO);

    /**
     * 添加竞赛题目
     *
     * @param examQuestAddDTO 竞赛题目添加参数
     * @return 返回是否成功添加，true 表示成功，false 表示失败
     */
    boolean questionAdd(ExamQuestAddDTO examQuestAddDTO);

    /**
     * 删除竞赛题目
     *
     * @param examId 竞赛ID
     * @param questionId 题目ID
     * @return 返回受影响的行数（通常为 0 或 1）
     */
    int questionDelete(Long examId, Long questionId);

    /**
     * 获取竞赛详情
     *
     * @param examId 竞赛ID
     * @return 返回竞赛的详细信息
     */
    ExamDetailVO detail(Long examId);

    /**
     * 编辑竞赛信息
     *
     * @param examEditDTO 竞赛编辑参数
     * @return 返回受影响的行数（通常为 0 或 1）
     */
    int edit(ExamEditDTO examEditDTO);

    /**
     * 删除竞赛
     *
     * @param examId 竞赛ID
     * @return 返回受影响的行数（通常为 0 或 1）
     */
    int delete(Long examId);

    /**
     * 发布竞赛
     *
     * @param examId 竞赛ID
     * @return 返回受影响的行数（通常为 0 或 1）
     */
    int publish(Long examId);

    /**
     * 取消发布竞赛
     *
     * @param examId 竞赛ID
     * @return 返回受影响的行数（通常为 0 或 1）
     */
    int cancelPublish(Long examId);
}

